home *** CD-ROM | disk | FTP | other *** search
/ MacWorld Secrets (4th Edition) / Mac Secrets CD 4th Ed.toast / Shareware & Freeware / KeyQuencer 1.2.2 / Developer’s toolkit / Common code / Action.h < prev    next >
Text File  |  1995-12-16  |  3KB  |  63 lines

  1. // =============================================================================
  2. // KEYQUENCER EXTENSIONS SAMPLE PROJECT HEADER - VERSION 1.2.2 - DECEMBER 1995
  3. // By Alessandro Levi Montalcini <alm@torino.alpcom.it>
  4. // ©1994-96 Binary Software, Inc. <binarysoft@eworld.com>
  5. // Don’t forget to send us any cool extensions you create!
  6. // This text looks best in monaco 9 font, 4 spaces per tab, no wrapping
  7. //==============================================================================
  8.  
  9. #ifndef _H_action
  10. #define _H_action
  11.  
  12. // =============================================================================
  13. // The Extension.c file provides a simple way to set up your globals
  14. // and dispatch the extension messages. You don't have to call SetUpA4() or
  15. // RestoreA4() in the init() and run() routines because the main() routine in
  16. // the Extension.c file has done all the dirty work for you.
  17. // You can use the Extension.c file without modifications and add your own
  18. // code to the Action.c file, inside the existing init() and run() routines.
  19. // =============================================================================
  20. // PROTOTYPES:
  21.  
  22. short    run        (ParamsPtr params, MachineHandle mac, GluePtr glue);
  23. short    init    (ParamsPtr params, MachineHandle mac, GluePtr glue);
  24.  
  25. long    SetupExtensionWorld        (void);
  26. void    RestoreExtensionWorld    (long world);
  27.  
  28. // =============================================================================
  29. // The SetupExtensionWorld and RestoreExtensionWorld are needed if you
  30. // install patches or callbacks that may be called by the system and still
  31. // want to access your extension globals. Here's an example of how to do it:
  32. /*
  33.  
  34. long gOldTrapAddress;                        // this is a global variable (the original trap address)
  35.  
  36. short init(MachineHandle mac, GluePtr glue)    // this is your extension's init() routine
  37. {
  38.     gOldTrapAddress = (long)GetToolTrapAddress(_TheTrapToPatch);
  39.     SetToolTrapAddress((UniversalProcPtr)MyTrapPatch, _TheTrapToPatch);
  40.     return kExtNoError;
  41. }
  42.  
  43. pascal void MyTrapPatch(void)                // this is your trap patch
  44. {                                            // (usually declared as pascal for toolbox traps)
  45.     pascal void (*OriginalTrap)(void);    
  46.     long world;
  47.     
  48.     world = SetupExtensionWorld();            // get access to your extension's globals
  49.     
  50.     // you may use your globals here
  51.     
  52.     OriginalTrap = (void*)gOldTrapAddress;    // gOldTrapAddress won't be available after RestoreExtensionWorld()
  53.     RestoreExtensionWorld(world);            // but the local variable will be OK
  54.     (*OriginalTrap)();                        // this is both a head and a tail patch, which is a Bad Thing
  55. }                                            // (you have to use some assembler to avoid it)
  56.  
  57. */
  58. // =============================================================================
  59.  
  60. #endif // _H_action
  61.  
  62. // =============================================================================
  63.